#include <stdio.h>
#define MaxSize 50 // 定义数组中最多存放50个元素
typedef int ElementType;
// 定义顺序表的结构体
typedef struct{
    ElementType data[MaxSize];
    int length;
}SeqList;
/**
 * 往顺序表中插入元素
 * @param list 顺序表
 * @param pos 插入的位置
 * @param elem 插入的元素
 * @return 返回值
 */
bool ListInsert(SeqList &seq,int pos,ElementType elem){
    // 判断插入的位置是否越界，越界则插入失败
    if(pos < 1 || pos > seq.length+1){
        return false;
    }
    // 判断顺序表是否已满，已满则插入失败
    if(seq.length >= MaxSize){
        return false;
    }
    // 元素后移
    for(int i=seq.length;i>=pos;i--){
        seq.data[i]=seq.data[i-1];
    }
    // 往指定位置插入元素
    seq.data[pos-1] = elem;
    seq.length++;
    return true;
}

/**
 * 遍历顺序表
 * @param seq
 */
void PrintList(SeqList seq){
    for(int i=0;i<seq.length;i++){
        printf("%3d ",seq.data[i]);
    }
    printf("\n");
}
/**
 * 删除指定位置的元素
 * @param seq 顺序表
 * @param pos 删除元素所在的位置
 * @param elem 存放删除的元素
 */
bool ListDelete(SeqList &seq,int pos,ElementType &elem){
    // 判断位置是否越界
    if(pos < 1 || pos > seq.length){
        return false;
    }
    // 保存删除的元素
    elem = seq.data[pos-1];
    for(int i=pos;i<= seq.length;i++){
        seq.data[i-1]= seq.data[i];
    }
    // 元素删除后长度减一
    seq.length--;
    return true;
}

/**
 * 查找顺序表中指定元素所在的第一个位置
 * @param seq 顺序表
 * @param elem 查找的元素
 * @return 元素所在的位置
 */
int LocateElem(SeqList seq,ElementType elem){
    for(int i=0;i<seq.length;i++){
        if(seq.data[i] == elem){
            return i+1; //元素所在的位置要+1
        }
    }
    return 0;
}

int main() {
    // 顺序表
    SeqList seq;
    seq.data[0] = 1;
    seq.data[1] = 2;
    seq.data[2] = 3;
    seq.length= 3;
    bool ret;// 返回值
    // 往顺序表中插入元素
    ret = ListInsert(seq,2,55);
    if(ret){
        printf("insert success\n");
    }else{
        printf("insert failed\n");
    }
    // 遍历顺序表
    PrintList(seq);
    ElementType  del;
    // 删除指定位置的元素
    ret = ListDelete(seq,4,del);
    if(ret){
        printf("delete %d success\n",del);
        PrintList(seq);
    }else{
        printf("delete failed\n");
    }
    // 查找顺序表中指定元素所在的第一个位置
    int pos = LocateElem(seq,44);
    printf("pos = %d\n",pos);

    return 0;
}
